#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include<stdlib.h>
#include<string.h>
//int int_cmp(const void * p1,const void * p2)
//{
//	return *((int*)p1) - *((int*)p2);
//}
//
//
//
//int main()
//{
//	int arr[10] = { 1,3,2,5,4,6,7,9,8,10 };
//	qsort(arr, sizeof(arr) / sizeof(arr[0]), sizeof(arr[0]), int_cmp);
//	for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++)
//	{
//		printf("%d ", arr[i]);
//	}
//	return 0;
//}
//struct Stu
//{
//	int age;
//	char name[30];
//};
//int stu_age_cmp(const void* p1, const void* p2)
//{
//	return ((struct Stu*)p1)->age - ((struct Stu*)p2)->age;
//}
//void test1(struct Stu(*p),int n)
//{
//	qsort(p,n, sizeof(*p),stu_age_cmp);
//}
//
//int main()
//{
//	struct Stu s[] = { {18,"zhangshan"},{19,"lisi"},{29,"gaoshou"} };
//	int n = sizeof(s) / sizeof(s[0]);
//	test1(s,n);
//	for (int i = 0; i < 3; i++)
//	{
//		printf("%d ",s[i].age);
//	}
//	return 0;
//}
//struct Stu
//{
//	int age;
//	char name[30];
//};
//int stu_age_cmp(const void* p1, const void* p2)
//{
//	return strcmp(((struct Stu*)p1)->name,((struct Stu*)p2)->name);
//}
//void test1(struct Stu(*p), int n)
//{
//	qsort(p, n, sizeof(*p), stu_age_cmp);
//}
//
//int main()
//{
//	struct Stu s[] = { {18,"zhangshan"},{19,"lisi"},{29,"gaoshou"} };
//	int n = sizeof(s) / sizeof(s[0]);
//	test1(s, n);
//	for (int i = 0; i < 3; i++)
//	{
//		printf("%s ", s[i].name);
//	}
//	return 0;
//}
int cmp(const void* p1, const void* p2)
{
	return *((int*)p1) - *((int*)p2);
}
void swap(void* p1, void* p2,int n)
{

	int i = 0;
	for (int i = 0; i < n; i++)
	{
		char tmp = *((char*)p1+i);
		*((char*)p1+i) = *((char*)p2+i);
		*((char*)p2+i) = tmp;
	}
}

void Bubble(void* base, int count, int len, int (*cmp)(const void* p1, const void* p2))
{
	int i = 0,j = 0;
	for (i = 0; i < count - 1; i++)
	{
		for (j = 0; j < count - i - 1; j++)
		{
			if (cmp((char*)base + j * len,(char*)base + (j + 1) * len)>0)
			{
				swap(((char*)base) + j * len,((char*)base) + (j + 1) * len,len);
			}
		}
	}


}




int main()
{
	int arr[] = { 1,3,2,4,6,7,45,5,64,76,86 };
	Bubble(arr, sizeof(arr) / sizeof(arr[0]), sizeof(arr[0]), cmp);
	for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++)
	{
		printf("%d ", arr[i]);
	}
	return 0;
}